--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nomadnet/ui/textui/ReadlineEdit.py 1.2.7 (bd4987a1) Text, 5.28 KB
Tff7b72import T7ee787urwid
Te6edf3_KILL_KEYS Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffctrl kTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffctrl wTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffctrl lTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72class T56d364_KillRingTb4b4b4:
T8b949e"""Module-global kill buffer shared across all ReadlineMixin widgets.
Mirrors GNU readline: consecutive kills accumulate into the same entry
(forward kills append, backward kills prepend); any non-kill keypress
breaks the chain so the next kill replaces the buffer.
"""
Te6edf3text Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3last_was_kill Tff7b72= Tff7b72False
Tf0883e@classmethod
Tff7b72def Td2a8ffreset_chainTb4b4b4(Tff7b72clsTb4b4b4)Tb4b4b4:
Tff7b72clsTff7b72.Td2a8fflast_was_kill Tff7b72= Tff7b72False
Tf0883e@classmethod
Tff7b72def Td2a8ffkillTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3killedTb4b4b4, Te6edf3directionTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3killedTb4b4b4:
Tff7b72return
Tff7b72if Tff7b72clsTff7b72.Td2a8fflast_was_killTb4b4b4:
Tff7b72clsTff7b72.Td2a8fftext Tff7b72= Tff7b72clsTff7b72.Td2a8fftext Tff7b72+ Te6edf3killed Tff7b72if Te6edf3direction Tff7b72== Ta5d6ff"Ta5d6ffforwardTa5d6ff" Tff7b72else Te6edf3killed Tff7b72+ Tff7b72clsTff7b72.Td2a8fftext
Tff7b72elseTb4b4b4:
Tff7b72clsTff7b72.Td2a8fftext Tff7b72= Te6edf3killed
Tff7b72clsTff7b72.Td2a8fflast_was_kill Tff7b72= Tff7b72True
Tff7b72class T56d364ReadlineMixinTb4b4b4:
T8b949e"""Mixin adding readline-style editing keys to an urwid.Edit-derived widget.
Bindings (GNU readline defaults, plus ctrl-l as kill-whole-buffer):
ctrl-a beginning-of-line
ctrl-e end-of-line
ctrl-u unix-line-discard (kill from cursor to beginning of line)
ctrl-k kill-line (kill from cursor to end of line)
ctrl-w unix-word-rubout (kill previous whitespace-delimited word)
ctrl-l kill-whole-buffer (kill the entire edit buffer)
ctrl-y yank (insert most-recently-killed text)
ctrl-left backward-word (alphanumeric boundary)
ctrl-right forward-word (alphanumeric boundary)
"Line" is the current logical line within the edit buffer, delimited by
newlines -- so on multiline Edits these act on the line under the cursor,
not the entire buffer.
The kill buffer is shared across all widgets using this mixin, so text
killed in one Edit can be yanked into another.
"""
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl aTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_beg_of_lineTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl eTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_end_of_lineTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_kill_to_begTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl kTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_kill_to_endTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl wTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_kill_word_backTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl lTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_kill_whole_bufferTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl yTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_yankTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl leftTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_backward_wordTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl rightTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_rl_forward_wordTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3result Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72if Te6edf3key Tff7b72not Tff7b72in Te6edf3_KILL_KEYSTb4b4b4:
Te6edf3_KillRingTff7b72.Td2a8ffreset_chainTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3result
Tff7b72if Te6edf3key Tff7b72not Tff7b72in Te6edf3_KILL_KEYSTb4b4b4:
Te6edf3_KillRingTff7b72.Td2a8ffreset_chainTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_rl_line_boundsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3textTb4b4b4, Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_textTb4b4b4, Tff7b72selfTff7b72.Td2a8ffedit_pos
Te6edf3bol Tff7b72= Te6edf3textTff7b72.Td2a8ffrfindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3posTb4b4b4)
Te6edf3bol Tff7b72= T79c0ff0 Tff7b72if Te6edf3bol Tff7b72== Tff7b72-T79c0ff1 Tff7b72else Te6edf3bol Tff7b72+ T79c0ff1
Te6edf3eol Tff7b72= Te6edf3textTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3posTb4b4b4)
Te6edf3eol Tff7b72= Tffa657lenTb4b4b4(Te6edf3textTb4b4b4) Tff7b72if Te6edf3eol Tff7b72== Tff7b72-T79c0ff1 Tff7b72else Te6edf3eol
Tff7b72return Te6edf3bolTb4b4b4, Te6edf3eol
Tff7b72def Td2a8ff_rl_deleteTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3startTb4b4b4, Te6edf3endTb4b4b4, Te6edf3kill_directionTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3start Tff7b72== Te6edf3endTb4b4b4:
Tff7b72return
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_text
Tff7b72if Te6edf3kill_direction Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3_KillRingTff7b72.Td2a8ffkillTb4b4b4(Te6edf3textTb4b4b4[Te6edf3startTb4b4b4:Te6edf3endTb4b4b4]Tb4b4b4, Te6edf3kill_directionTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_textTb4b4b4(Te6edf3textTb4b4b4[Tb4b4b4:Te6edf3startTb4b4b4] Tff7b72+ Te6edf3textTb4b4b4[Te6edf3endTb4b4b4:Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3startTb4b4b4)
Tf0883e@staticmethod
Tff7b72def Td2a8ff_rl_is_word_charTb4b4b4(Te6edf3chTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3chTff7b72.Td2a8ffisalnumTb4b4b4(Tb4b4b4) Tff7b72or Te6edf3ch Tff7b72== Ta5d6ff"Ta5d6ff_Ta5d6ff"
Tff7b72def Td2a8ff_rl_beg_of_lineTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3bolTb4b4b4, Te6edf3_ Tff7b72= Tff7b72selfTff7b72.Td2a8ff_rl_line_boundsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3bolTb4b4b4)
Tff7b72def Td2a8ff_rl_end_of_lineTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3eol Tff7b72= Tff7b72selfTff7b72.Td2a8ff_rl_line_boundsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3eolTb4b4b4)
Tff7b72def Td2a8ff_rl_kill_to_begTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3bolTb4b4b4, Te6edf3_ Tff7b72= Tff7b72selfTff7b72.Td2a8ff_rl_line_boundsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_rl_deleteTb4b4b4(Te6edf3bolTb4b4b4, Tff7b72selfTff7b72.Td2a8ffedit_posTb4b4b4, Te6edf3kill_directionTff7b72=Ta5d6ff"Ta5d6ffbackwardTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_rl_kill_to_endTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3eol Tff7b72= Tff7b72selfTff7b72.Td2a8ff_rl_line_boundsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_rl_deleteTb4b4b4(Tff7b72selfTff7b72.Td2a8ffedit_posTb4b4b4, Te6edf3eolTb4b4b4, Te6edf3kill_directionTff7b72=Ta5d6ff"Ta5d6ffforwardTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_rl_kill_word_backTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3textTb4b4b4, Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_textTb4b4b4, Tff7b72selfTff7b72.Td2a8ffedit_pos
Te6edf3p Tff7b72= Te6edf3pos
Tff7b72while Te6edf3p Tff7b72> T79c0ff0 Tff7b72and Te6edf3textTb4b4b4[Te6edf3p Tff7b72- T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffisspaceTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72-Tff7b72= T79c0ff1
Tff7b72while Te6edf3p Tff7b72> T79c0ff0 Tff7b72and Tff7b72not Te6edf3textTb4b4b4[Te6edf3p Tff7b72- T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffisspaceTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72-Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ff_rl_deleteTb4b4b4(Te6edf3pTb4b4b4, Te6edf3posTb4b4b4, Te6edf3kill_directionTff7b72=Ta5d6ff"Ta5d6ffbackwardTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_rl_kill_whole_bufferTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_rl_deleteTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffedit_textTb4b4b4)Tb4b4b4, Te6edf3kill_directionTff7b72=Ta5d6ff"Ta5d6ffforwardTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_rl_yankTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3_KillRingTff7b72.Td2a8fftextTb4b4b4:
Tff7b72return
Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_pos
Te6edf3text Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_text
Tff7b72selfTff7b72.Td2a8ffset_edit_textTb4b4b4(Te6edf3textTb4b4b4[Tb4b4b4:Te6edf3posTb4b4b4] Tff7b72+ Te6edf3_KillRingTff7b72.Td2a8fftext Tff7b72+ Te6edf3textTb4b4b4[Te6edf3posTb4b4b4:Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3pos Tff7b72+ Tffa657lenTb4b4b4(Te6edf3_KillRingTff7b72.Td2a8fftextTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_rl_backward_wordTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3textTb4b4b4, Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_textTb4b4b4, Tff7b72selfTff7b72.Td2a8ffedit_pos
Tff7b72while Te6edf3pos Tff7b72> T79c0ff0 Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ff_rl_is_word_charTb4b4b4(Te6edf3textTb4b4b4[Te6edf3pos Tff7b72- T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3pos Tff7b72-Tff7b72= T79c0ff1
Tff7b72while Te6edf3pos Tff7b72> T79c0ff0 Tff7b72and Tff7b72selfTff7b72.Td2a8ff_rl_is_word_charTb4b4b4(Te6edf3textTb4b4b4[Te6edf3pos Tff7b72- T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3pos Tff7b72-Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3posTb4b4b4)
Tff7b72def Td2a8ff_rl_forward_wordTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3textTb4b4b4, Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ffedit_textTb4b4b4, Tff7b72selfTff7b72.Td2a8ffedit_pos
Te6edf3n Tff7b72= Tffa657lenTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72while Te6edf3pos Tff7b72< Te6edf3n Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ff_rl_is_word_charTb4b4b4(Te6edf3textTb4b4b4[Te6edf3posTb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3pos Tff7b72+Tff7b72= T79c0ff1
Tff7b72while Te6edf3pos Tff7b72< Te6edf3n Tff7b72and Tff7b72selfTff7b72.Td2a8ff_rl_is_word_charTb4b4b4(Te6edf3textTb4b4b4[Te6edf3posTb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3pos Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffset_edit_posTb4b4b4(Te6edf3posTb4b4b4)
Tff7b72class T56d364ReadlineEditTb4b4b4(Te6edf3ReadlineMixinTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
T8b949e"""Drop-in urwid.Edit replacement with readline-style editing keys."""
Tff7b72pass
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────